#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
WMS Sample 服务配置管理工具部署包生成脚本
"""

import os
import shutil
import zipfile
from datetime import datetime
from pathlib import Path

def create_deployment_package():
    """创建部署包"""
    
    # 获取当前时间戳
    timestamp = datetime.now().strftime("%d%m%y%H_%H%M")
    
    # 版本信息
    version = "v2.1.1"
    build_type = "Production"
    
    # 部署包名称
    package_name = f"WMS_ServiceManager_{version}_{build_type}_{timestamp}"
    
    # 源目录和目标目录
    source_dir = Path("dist/service_config_manager")
    target_dir = Path("deployments") / package_name
    
    print(f"创建部署包: {package_name}")
    
    # 检查源目录是否存在
    if not source_dir.exists():
        print(f"错误: 源目录不存在 {source_dir}")
        print("请先运行 pyinstaller 打包")
        return False
    
    # 创建目标目录
    target_dir.mkdir(parents=True, exist_ok=True)
    
    # 复制主程序文件
    print("复制主程序文件...")
    shutil.copy2(source_dir / "service_config_manager.exe", target_dir)
    
    # 复制依赖目录
    if (source_dir / "_internal").exists():
        print("复制依赖文件...")
        shutil.copytree(source_dir / "_internal", target_dir / "_internal", dirs_exist_ok=True)
    
    # 复制WMS服务exe文件
    wms_service_exe = Path("dist/wms_service/wms_service.exe")
    if wms_service_exe.exists():
        print("复制WMS服务文件...")
        shutil.copy2(wms_service_exe, target_dir)
        print(f"WMS服务文件已复制: {wms_service_exe.stat().st_size / (1024*1024):.1f} MB")
    else:
        print("警告: WMS服务exe文件不存在，请先打包WMS服务")
    
    # 复制配置文件
    print("复制配置文件...")
    config_files = ["config.json", "client_config.json"]
    for config_file in config_files:
        if Path(config_file).exists():
            shutil.copy2(config_file, target_dir)
    
    # 创建启动脚本
    print("创建启动脚本...")
    start_script = target_dir / "启动服务管理工具.bat"
    with open(start_script, 'w', encoding='utf-8') as f:
        f.write(f"""@echo off
chcp 65001 > nul
title WMS 服务配置管理工具 {version}

echo ========================================
echo WMS Sample 服务配置管理工具 {version}
echo ========================================
echo.

REM 检查管理员权限
net session >nul 2>&1
if %errorLevel% == 0 (
    echo [信息] 已获得管理员权限
) else (
    echo [警告] 建议以管理员身份运行以获得完整功能
)

echo.
echo 启动服务管理工具...
echo.

start "" service_config_manager.exe

echo.
echo 服务管理工具已启动
pause
""")
    
    # 创建系统检查脚本
    print("创建系统检查脚本...")
    check_script = target_dir / "系统检查.bat"
    with open(check_script, 'w', encoding='utf-8') as f:
        f.write("""@echo off
chcp 65001 > nul
title 系统环境检查

echo ========================================
echo WMS Sample 系统环境检查
echo ========================================
echo.

echo [检查] Python 环境...
python --version 2>nul
if %errorLevel% == 0 (
    echo [OK] Python 已安装
) else (
    echo [警告] Python 未安装或未添加到PATH
)

echo.
echo [检查] Windows 服务管理权限...
net session >nul 2>&1
if %errorLevel% == 0 (
    echo [OK] 具有管理员权限
) else (
    echo [警告] 需要管理员权限来管理Windows服务
)

echo.
echo [检查] 端口占用情况...
netstat -an | findstr :58501 >nul
if %errorLevel% == 0 (
    echo [警告] 端口 58501 已被占用
) else (
    echo [OK] 端口 58501 可用
)

echo.
echo [检查] WMS 服务状态...
sc query WMSSampleService >nul 2>&1
if %errorLevel% == 0 (
    echo [信息] WMS 服务已安装
    sc query WMSSampleService | findstr STATE
) else (
    echo [信息] WMS 服务未安装
)

echo.
echo 检查完成
pause
""")
    
    # 创建使用说明
    print("创建使用说明...")
    readme_file = target_dir / "使用说明.txt"
    with open(readme_file, 'w', encoding='utf-8') as f:
        f.write(f"""WMS Sample 服务配置管理工具 {version}
========================================

部署包内容:
- service_config_manager.exe    主程序
- _internal/                    依赖文件目录
- config.json                   系统配置文件
- client_config.json           客户端配置文件
- 启动服务管理工具.bat           快速启动脚本
- 系统检查.bat                  系统环境检查脚本
- 使用说明.txt                  本文件

使用方法:
1. 双击"启动服务管理工具.bat"启动程序
2. 或直接运行"service_config_manager.exe"
3. 建议以管理员身份运行以获得完整功能

功能说明:
- 服务管理: 安装、卸载、启动、停止WMS服务
- 配置管理: 修改API服务器配置和服务参数
- 状态监控: 实时显示服务运行状态

注意事项:
- 需要管理员权限来管理Windows服务
- 确保端口58501未被其他程序占用
- 服务文件需要在项目根目录中

技术支持:
- 版本: {version}
- 构建时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
- 构建类型: {build_type}

故障排除:
1. 如果程序无法启动，请运行"系统检查.bat"
2. 如果服务安装失败，请检查WMS服务文件是否存在
3. 如果端口冲突，请修改config.json中的端口配置
""")
    
    # 创建版本信息文件
    version_file = target_dir / "version.json"
    with open(version_file, 'w', encoding='utf-8') as f:
        import json
        version_info = {
            "version": version,
            "build_type": build_type,
            "build_time": datetime.now().isoformat(),
            "timestamp": timestamp,
            "package_name": package_name
        }
        json.dump(version_info, f, indent=2, ensure_ascii=False)
    
    # 获取文件大小信息
    exe_size = (target_dir / "service_config_manager.exe").stat().st_size
    exe_size_mb = exe_size / (1024 * 1024)
    
    print(f"\n部署包创建完成!")
    print(f"位置: {target_dir}")
    print(f"主程序大小: {exe_size_mb:.1f} MB")
    print(f"包含文件:")
    for file_path in target_dir.rglob("*"):
        if file_path.is_file():
            rel_path = file_path.relative_to(target_dir)
            size_kb = file_path.stat().st_size / 1024
            print(f"  {rel_path} ({size_kb:.1f} KB)")
    
    return True

if __name__ == "__main__":
    create_deployment_package() 